// 1. 导入 mysql 模块
const mysql = require('mysql')
// 2. 建立与 MySQL 数据库的连接
const db = mysql.createPool({
	host: '127.0.0.1',        // 数据库的 IP 地址
    user: 'root',             // 登录数据库的账号
    password: 'snrh0902',     // 示例数据库的密码
    database: 'my_db_01',     // 指定要操作哪个数据库 
})
// 检测mysql模块能否正常工作
// db.query('SELECT * FROM users',(err, results) => {
// // db.query('SELECT 1',(err, results) => {
// 	if (err) return console.log(err.message)
//     // 只要能打印出[ RowDataPacket { '1': 1 } ]的结果，就证明数据库连接正常
//     console.log(results)
// })

// 查询数据
// 查询 users 表中的所有数据
// const sqlStr = 'SELECT * FROM users'
// db.query(sqlStr,(err, results) => {
//   	// 查询失败
// 	if (err) return console.log(err.message)
//     // 查询成功
//     // 注意:如果执行的是 select查询语句，则执行的结果是数组
//     console.log(results)
// })

// 插入数据
// // 1. 要插入到 users 表中的数据对象
// const user = { username: 'test_boy2', password: 'admin1234'}
// // 2. 待执行的 SQL 语句,其中英文的 ? 表示占位符
// const sqlStr = 'INSERT INTO users (username, password) VALUES (?, ?)'
// // 3，使用数组的形式，依次为?占位符指定具体的值
// db.query(sqlStr, [user.username, user.password], (err, results) => {
//     if (err) return console.log(err.message); // 失败
//     if (results.affectedRows === 1) console.log('插入数据成功'); // 成功
//     // 注意:如果执行的是 insert into插入语句，则results是一个对象
//     // 可以通过 affectedRows属性，来判断是否插入数据成功
// })

// 插入数据的快捷方式
// // 1. 要插入到 users 表中的数据对象
// const user = { username: 'test_boy3', password: 'admin1234'}
// // 2. 待执行的 SQL 语句,其中英文的 ? 表示占位符
// const sqlStr = 'INSERT INTO users SET ?'
// // 3. 直接将数据对象当作占位符的值
// db.query(sqlStr, user, (err, results) => {
//     if (err) return console.log(err.message); // 失败
//     if (results.affectedRows === 1) console.log('插入数据成功'); // 成功
  
//   	// 注意:如果执行的是 insert into插入语句，则results是一个对象
//     // 可以通过 affectedRows属性，来判断是否插入数据成功
// })

// 更新数据
// // 可以通过如下方式，更新表中的数据:
// // 1. 要更新的数据对象
// const user = { id:1, username:'update', password:'123456789'}
// // 2. 要执行的 SQL 语句
// const sqlStr = 'UPDATE users SET username=?, password=? WHERE id=?'
// // 3. 使用 db.query() 执行 SQL 语句的同时,使用数据依次为占位符指定具体的值
// db.query(sqlStr, [user.username, user.password, user.id] ,(err,results) => {
//     if (err) return console.log(err.message); // 失败
//     // 注意:执行了update语句之后，执行的结果，也是一个对象，可以通过 affecledRows判断是否更新成功
//     if (results.affectedRows === 1) console.log('更新数据成功'); // 成功
// })

// 快捷表中的数据:
// // 1. 要更新的数据对象
// const user = { id:1, username:'update2', password:'123456789'}
// // 2. 要执行的 SQL 语句
// const sqlStr = 'UPDATE users SET ? WHERE id=?'
// // 3. 使用 db.query() 执行 SQL 语句的同时,使用数据依次为占位符指定具体的值
// db.query(sqlStr,  [user, user.id] ,(err,results) => {
//     if (err) return console.log(err.message); // 失败
//     // 注意:执行了update语句之后，执行的结果，也是一个对象，可以通过 affecledRows判断是否更新成功
//     if (results.affectedRows === 1) console.log('更新数据成功'); // 成功
// })

// 删除数据
// // 1. 要执行的 SQL 语句
// const sqlStr = 'DELETE FROM users WHERE id=?'
// // 2. 调用 db.query() 执行 SQL 语句的同时, 为占位符指定具体的值
// // 注意: 如果 SQL 语句中有多个占位符,则必须使用数组为每个占位符指定具体的值
// // 如果 SQL 语句中只有一个占位符,则可以省略数组
// db.query(sqlStr,  15 ,(err,results) => {
//     if (err) return console.log(err.message); // 失败
//     // 注意:执行 delete语句之后，结果也是一个对象，也会包含affectedRows属性
//     if (results.affectedRows === 1) console.log('删除数据成功'); // 成功
// })

// 标记删除  使用update更新状态模拟删除行为 并没有真正删除数据
const sqlStr = 'UPDATE users SET status=? WHERE id=?'
db.query(sqlStr, [1,2] ,(err,results) => {
    if (err) return console.log(err.message); // 失败
    if (results.affectedRows === 1) console.log('标记删除成功'); // 成功
})

